package com.symaster.gameengine.geom;

/**
 * 向量
 */
public class Vector extends com.symaster.common.geom.entity.Vector {
    private double x, y;

    public Vector() {
    }

    public Vector(double x, double y) {
        this.x = x;
        this.y = y;
        if (Double.compare(Math.abs(this.x), 1e-10) <= 0) {
            this.x = 0;
        }
        if (Double.compare(Math.abs(this.y), 1e-10) <= 0) {
            this.y = 0;
        }
    }

    /**
     * 计算两个向量的点积
     */
    public static double dotProduct(Vector v1, Vector v2) {
        return v1.x * v2.x + v1.y * v2.y;
    }

    /**
     * 计算向量的模
     */
    public double magnitude() {
        return Math.sqrt(x * x + y * y);
    }

    /**
     * 计算与上方基准(0,1)的角度，结果以度数返回
     */
    public double angleFromUp() {
        // 使用 atan2，atan2(y, x) 返回的是从 X 轴正方向开始的角度
        double angleRad = Math.atan2(x, y);  // 注意顺序反转

        // 将弧度转换为度数
        double angleDeg = Math.toDegrees(angleRad);

        // 确保角度在 0 到 360 度之间
        if (angleDeg < 0) {
            angleDeg += 360;
        }

        return angleDeg;
    }

}
